package team.hyznrj.studentsys.service;

import team.hyznrj.studentsys.dto.ConductScoreDto;
import team.hyznrj.studentsys.dto.ConductSummaryScoreDto;
import team.hyznrj.studentsys.form.ConductScoreConditionalForm;

import java.util.List;

public interface ConductScoreService {
    /**
     * 根据ConductScoreConditionalForm 来获取信息
     * 支持单个和批量查询
     * 单个的 StudentId 例:201611701307
     * 批量的 StudentId 例:201611701307,201611701308 , 或者直接使用Stduentids
     * @param conductScoreConditionalForm
     * @return List<ConductScoreDto>
     */
    List<ConductScoreDto> findByConductScoreConditionForm(ConductScoreConditionalForm conductScoreConditionalForm);

    List<ConductSummaryScoreDto> sumConductScore(List<ConductScoreDto> conductScoreDtos);
    /**
     * 插入或者更新
     * 传入实体类里的status可以为null
     * academicYear 直接传String,不用根据表转换
     * List<SkillMarkDto> 里的SkillMarkDto 和 List<QualityMarkDto>的 academicYear 和 schoolTerm 可以为null
     * id 和 ConductScoreDto内的实体类的 id 或者 conductScoreId 一样 ,全部使用 KeyUtil.getUniqueKey 生成
     * 更新时:
     * 只要idd 和 ConductScoreDto内的实体类的 id 或者 conductScoreId 与数据库已有id相同,就可完成覆盖更新
     * @param conductScoreDto
     * @return true or flase
     */
    boolean insertOrUpdateConductScore(List<ConductScoreDto> conductScoreDto);

    /**
     * 将 status 属性置为0
     * 失败时抛出RuntimeException
     * @param id
     * @return true
     */
    boolean deleteConductScoreWithSetZero(String id);

    /**
     * 删除数据库内数据
     * 失败时抛出RuntimeException
     * @param id
     * @return
     */
    boolean deleteRealConductScore(String id);

}
